/*:
* @plugindesc 楓之舞功能 - 金錢、物品、隊員變更提示
* @author 老饕
* @version 1.0.0
* @date 2020.2.23

* @help
* 此插件實現金錢、物品、隊員變更時，自動觸發公共事件。
* 設有四個變量，用於存儲變更的訊息，詳見變量說明。
* 在公共事件裡利用文本代碼調取變量值，顯示對應文字即可實現金錢、物品、隊
* 員變更的自動提示。
* 
* 【插件指令】
* ChangeItemMsg on 顯示自動提示
* ChangeItemMsg off 關閉自動提示
* 
* @param ShowMsg
* @text 是否顯示變動提示
* @type boolean
* @on  顯示提示
* @off 關閉提示
* @desc 是否顯示金錢物品隊員變動提示
* @default false
* 

* @param CommonEventID
* @text 自動執行的公共事件編號（物品得失/隊員變更提示）
* @type number
* @min 1
* @desc 金錢、物品、隊員時自動觸發的公共事件編號
* @default 1
* 
* @param QuestCommonEventID
* @text 自動執行的公共事件編號（任務系統提示）
* @type number
* @min 1
* @desc 任務變更時自動觸發的公共事件編號
* @default 1
*
* @param ---變量---
* @param TypeVarID
* @parent ---變量---
* @text 類型（變量編號）
* @type number
* @min 1
* @desc 記錄類型的變量編號，可用於顯示文字视窗中判斷事件類型（變量值：0-金錢，1-物品，2-武器，3-護甲，4-隊員）
* @default 1
* 
* @param OperationVarID
* @parent ---變量---
* @text 操作（變量編號）
* @type number
* @min 1
* @desc 記錄操作類型的變量編號，可用於顯示文字视窗中判斷操作類型（變量值：0-增加，1-減少）
* @default 2
* 
* @param ObjectVarID
* @parent ---變量---
* @text 對象（變量編號）
* @type number
* @min 1
* @desc 記錄變更內容的變量編號，可用於顯示文字视窗中顯示變更對象（變量值：道具-道具編號，隊員-隊員編號）
* @default 3
* 
* @param NumberVarID
* @parent ---變量---
* @text 數量（變量編號）
* @type number
* @min 1
* @desc 記錄數量的變量編號，可用於顯示文字视窗中判斷操作數字（變量值：金錢數/道具數量）
* @default 4


*/

var SWDA_ChangeItemMsg = SWDA_ChangeItemMsg || {};

var parameters = PluginManager.parameters('SWDA_ChangeItemMsg');

SWDA_ChangeItemMsg.ShowMsg = eval(parameters['ShowMsg']) || true;
SWDA_ChangeItemMsg.CommonEventID = Number(parameters['CommonEventID']) || 1;
SWDA_ChangeItemMsg.QuestCommonEventID = Number(parameters['QuestCommonEventID']) || 1;
SWDA_ChangeItemMsg.TypeVarID = Number(parameters['TypeVarID']) || 1;
SWDA_ChangeItemMsg.OperationVarID = Number(parameters['OperationVarID']) || 2;
SWDA_ChangeItemMsg.ObjectVarID = Number(parameters['ObjectVarID']) || 3;
SWDA_ChangeItemMsg.NumberVarID = Number(parameters['NumberVarID']) || 4;

// Change Gold
SWDA_ChangeItemMsg.command125 = Game_Interpreter.prototype.command125;
Game_Interpreter.prototype.command125 = function() {
	SWDA_ChangeItemMsg.command125.call(this);
	/*
    var value = this.operateValue(this._params[0], this._params[1], this._params[2]);
    $gameParty.gainGold(value);
    //return true;
	*/
	if (SWDA_ChangeItemMsg.ShowMsg){
		$gameVariables.setValue(SWDA_ChangeItemMsg.TypeVarID, 0);						// 類型：金錢
		$gameVariables.setValue(SWDA_ChangeItemMsg.OperationVarID, this._params[0]);	// 操作：增/減
		$gameVariables.setValue(SWDA_ChangeItemMsg.NumberVarID, this._params[2]);		// 數量
		
		var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.CommonEventID];
		var eventId = this.isOnCurrentMap() ? this._eventId : 0;
		this.setupChild(commonEvent.list, eventId);
	}
	return true;
};

// Change Items
SWDA_ChangeItemMsg.command126 = Game_Interpreter.prototype.command126;
Game_Interpreter.prototype.command126 = function() {
	SWDA_ChangeItemMsg.command126.call(this);
	/*
    var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
    $gameParty.gainItem($dataItems[this._params[0]], value);
    return true;
	*/
	if (SWDA_ChangeItemMsg.ShowMsg){
		$gameVariables.setValue(SWDA_ChangeItemMsg.TypeVarID, 1);						// 類型：物品
		$gameVariables.setValue(SWDA_ChangeItemMsg.OperationVarID, this._params[1]);	// 操作：增/減
		$gameVariables.setValue(SWDA_ChangeItemMsg.ObjectVarID, this._params[0]);		// 對象：物品ID
		$gameVariables.setValue(SWDA_ChangeItemMsg.NumberVarID, this._params[3]);		// 數量
		
		var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.CommonEventID];
		var eventId = this.isOnCurrentMap() ? this._eventId : 0;
		this.setupChild(commonEvent.list, eventId);
	}
	return true;
};

// Change Weapons
SWDA_ChangeItemMsg.command127 = Game_Interpreter.prototype.command127;
Game_Interpreter.prototype.command127 = function() {
	SWDA_ChangeItemMsg.command127.call(this);
	/*
    var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
    $gameParty.gainItem($dataWeapons[this._params[0]], value, this._params[4]);
    return true;
	*/
	if (SWDA_ChangeItemMsg.ShowMsg){
		$gameVariables.setValue(SWDA_ChangeItemMsg.TypeVarID, 2);						// 類型：武器
		$gameVariables.setValue(SWDA_ChangeItemMsg.OperationVarID, this._params[1]);	// 操作：增/減
		$gameVariables.setValue(SWDA_ChangeItemMsg.ObjectVarID, this._params[0]);		// 對象：武器ID
		$gameVariables.setValue(SWDA_ChangeItemMsg.NumberVarID, this._params[3]);		// 數量
		var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.CommonEventID];
		var eventId = this.isOnCurrentMap() ? this._eventId : 0;
		this.setupChild(commonEvent.list, eventId);
	}
	return true;
};

// Change Armors
SWDA_ChangeItemMsg.command128 = Game_Interpreter.prototype.command128;
Game_Interpreter.prototype.command128 = function() {
	SWDA_ChangeItemMsg.command128.call(this);
	/*
    var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
    $gameParty.gainItem($dataArmors[this._params[0]], value, this._params[4]);
    return true;
	*/
	if (SWDA_ChangeItemMsg.ShowMsg){
		$gameVariables.setValue(SWDA_ChangeItemMsg.TypeVarID, 3);						// 類型：護甲
		$gameVariables.setValue(SWDA_ChangeItemMsg.OperationVarID, this._params[1]);	// 操作：增/減
		$gameVariables.setValue(SWDA_ChangeItemMsg.ObjectVarID, this._params[0]);		// 對象：護甲ID
		$gameVariables.setValue(SWDA_ChangeItemMsg.NumberVarID, this._params[3]);		// 數量
		var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.CommonEventID];
		var eventId = this.isOnCurrentMap() ? this._eventId : 0;
		this.setupChild(commonEvent.list, eventId);
	}
	return true;
};

// Change Party Member
SWDA_ChangeItemMsg.command129 = Game_Interpreter.prototype.command129;
Game_Interpreter.prototype.command129 = function() {
	SWDA_ChangeItemMsg.command129.call(this);
	/*
    var actor = $gameActors.actor(this._params[0]);
    if (actor) {
        if (this._params[1] === 0) {  // Add
            if (this._params[2]) {   // Initialize
                $gameActors.actor(this._params[0]).setup(this._params[0]);
            }
            $gameParty.addActor(this._params[0]);
        } else {  // Remove
            $gameParty.removeActor(this._params[0]);
        }
    }
    return true;
	*/
	if (SWDA_ChangeItemMsg.ShowMsg){
		$gameVariables.setValue(SWDA_ChangeItemMsg.TypeVarID, 4);						// 類型：隊員
		$gameVariables.setValue(SWDA_ChangeItemMsg.OperationVarID, this._params[1]);	// 操作：入隊/離隊
		$gameVariables.setValue(SWDA_ChangeItemMsg.ObjectVarID, this._params[0]);		// 對象：角色ID
		var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.CommonEventID];
		var eventId = this.isOnCurrentMap() ? this._eventId : 0;
		this.setupChild(commonEvent.list, eventId);
	}
	return true;
};


// 任務系統提示（YEP_QuestJournal）
SWDA_ChangeItemMsg.Game_Interpreter_pluginCommand =
  Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
  SWDA_ChangeItemMsg.Game_Interpreter_pluginCommand.call(this, command, args);
  if (SWDA_ChangeItemMsg.ShowMsg){
	  if (command === 'Quest') {
		this.processQuestMsg(this.argsToString(args));
	  }
  }
};


Game_Interpreter.prototype.processQuestMsg = function(line) {
  var showQuestMsg = true;

  if (this._index-1>=0){
	var lastEvent = this._list[this._index-1];
    if (lastEvent.code==356){
		var lastCommand = lastEvent.parameters[0].split(" ").shift();
		if (lastCommand == 'Quest')
			showQuestMsg = false;
	}
  }
  if (showQuestMsg){
	  var commonEvent = $dataCommonEvents[SWDA_ChangeItemMsg.QuestCommonEventID];
	  var eventId = this.isOnCurrentMap() ? this._eventId : 0;
	  this.setupChild(commonEvent.list, eventId);
  }  
};

//---------------------------
//          Game_Interpreter【插件指令】
//---------------------------
SWDA_ChangeItemMsg.PLUGIN_COMMAND = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
	SWDA_ChangeItemMsg.PLUGIN_COMMAND.call(this, command, args);

	
	if (command == 'ChangeItemMsg'){
		var ChangeItemMsgAction = args[0];
		if(ChangeItemMsgAction.toUpperCase() == "ON")
			SWDA_ChangeItemMsg.ShowMsg = true;
		if(ChangeItemMsgAction.toUpperCase() == "OFF")
			SWDA_ChangeItemMsg.ShowMsg = false;
	}
};
